/********************************************************************************
 * Project Name		[JavaEE_Components]
 * File Name     	[Xml02.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package xml._notes;

/**
 * XML语法
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public final class Xml02 {

	public void xmlGrammarRules() {
		/**
		 * XML的语法规则<br/>
		 * 1. XML文件有且仅有一个根标记, 其他标记必须封装在根标记中<br/>
		 * 2. 文件的标记必须形成树状结构<br/>
		 * 3. 大小写敏感<br/>
		 * 4. 标记的属性必须用 ""或 ''括起来<br/>
		 */
	}

	public void xmlNamingConvention() {
		/**
		 * XML标记必须遵循下面的命名规则<br/>
		 * 1. 名字中可以包含字母, 数字以及其它字母或文字, 还可包含下划线, 点, 连字符[-]<br/>
		 * 2. 名字不能以数字开头, 可以用字母, 文字或者下划线开头<br/>
		 * 3. 名字不能以字母xml[或XML或Xml...]开头<br/>
		 * 4. 名字中不能包含空格<br/>
		 */
	}

	public void xmlDeclaration() {
		/**
		 * XML声明<br/>
		 * 
		 * 大多数XML文档以XML声明作为开始, 它向解析器提供了关于文档的基本信息<br/>
		 * 建议使用XML声明, 但它不是必需的. 如果有的话, 那么它一定是文档的第一行内容<br/>
		 * <code>
		 * // 问号与xml之间不能有空格
		 * <?xml version="1.0" encoding="UTF-8" standalone="no"?>
		 * </code><br/>
		 * 
		 * 声明最多可以包含三个名称-值对<br/>
		 * 1. version: 使用的XML版本:1.0, 1.1<br/>
		 * 2. encoding: 该文档所使用的字符集, 默认为UTF-8<br/>
		 * 3. standalone: yes或no, 定义了是否孤立处理该文档, 如果XML文档没有引用任何其它文件, 则可以指定
		 * standalone="yes" 如果XML文档引用其它描述该文档可以包含什么的文件[如DTD], 则 standalone="no".
		 * 默认值为"no"<br/>
		 */
	}

	public void xmlTags() {
		/**
		 * XML标记, 左尖括号"<"和右尖括号">"之间的文本<br/>
		 * 
		 * 1. 在< >中的称为开始标记, 在</ >中的称为结束标记<br/>
		 * 2. 空标记: 不包含元素的标记. 空标签必须以"/>"结束<br/>
		 * 格式: <空标记的名称/>或<空标记的名称 属性列表/><br/>
		 * 
		 * 注意:<br/>
		 * 1. 除空标记外, 标签必须成对: 有始有终, 所有的开始标签和结束标签必须匹配<br/>
		 * 2. 在标记符"<"和"标记的名称"之间不能含有空格<br/>
		 * 3. 在标记符"/>"前面可以有空格或回行<br/>
		 * 4. 标签必须嵌套正确<br/>
		 */
	}

	public void xmlElements() {
		/**
		 * XML元素: 位于开始标记与结束标记间<br/>
		 * 
		 * 一份文档有且只有一个根元素<br/>
		 * 根元素下的所有元素叫"子元素"<br/>
		 * 标签必须嵌套正确<br/>
		 * 不包含子元素的元素叫"叶子", 包含子元素的元素叫"分支", 如: <tag>.....</tag><br/>
		 */
	}

	public void xmlAttributes() {
		/**
		 * XML属性: 一个元素的开始标志中的名称-值对<br/>
		 * 
		 * 1. 所有的属性值必须位于单引号或双引号中<br/>
		 * 2. 每一个元素的属性不允许出现超过一次<br/>
		 * 
		 * 属性的组成: 属性是一个名值对, 必须由名称和值组成, 属性必须在标记的开始标记或空标记中声明, 用"="为属性指定一个值<br/>
		 * 语法<br/>
		 * 1. <标记名称 属性列表/><br/>
		 * 2. <标记名称 属性列表>XXX</标记名称>
		 * 
		 * 示例: <桌子 width="40" height='100'/><br/>
		 * 
		 * 使有属性的原则:<br/>
		 * 1. 属性不体现数据的结构, 只是数据的附加信息<br/>
		 * 2. 一个信息是作为一个标记的属性或子标记, 取决于具体问题, 不要因为属性的频繁使用破坏XML的数据结构<br/>
		 * 
		 * 下面是一个结构清晰的XML文件:<br/>
		 * <code>
		 * <楼房 height="23m" width="12m"> 
		 *     <结构>混凝土</结构> 
		 *     <类别>商用</类别> 
		 * </楼房>
		 * </code><br/>
		 * 
		 * 下面是一个结构不清晰的XML文件:<br/>
		 * <code>
		 * <楼房 height="23m" width="12m" 结构="混凝土" 建筑商="中国建工" 类别="商用"></楼房>
		 * </code><br/>
		 */
	}

	public void xmlComments() {
		/**
		 * XML注释<br/>
		 * 注释可以出现在文档的任何位置[但不建议放在声明前面, 部分浏览器会报错]<br/>
		 * 注释语法: <!-- comments -->结束<br/>
		 * 注释内不能包含双连字符(--), 除此之外, 注释可以包含任何内容.<br/>
		 * 注释内的任何标记都被忽略<br/>
		 */
	}

	public void xmlPI() {
		/**
		 * XML处理指令[Processing Instruction]<br/>
		 * 
		 * 处理指令是为使用一段特殊代码而设计的标记, 简称为PI<br/>
		 * 大多数XML文档都是以XML声明开始, 该声明本身就是特殊的处理指令<br/>
		 * 处理指令对应用程序特定的数据进行编码. 一条处理指令包含一个目标, 后跟数据. 用<?和?>定界符将处理指令包起来<br/>
		 */
	}

	public void xmlEntities() {
		/**
		 * XML规范预定义了五个实体<br/>
		 * <code>
		 * 实体: 	&lt; &gt; &quot; &apos; &amp;
		 * 对应字符: <    >     "       '     &
		 * </code><br/>
		 * 
		 * 自定义实体[在DTD中定义]<br/>
		 * 1. 引用实体: <!ENTITY 实体名称 "实体内容">. 在XML中使用引用实体, 用 &实体标志 代表实体内容<br/>
		 * 2. 参数实体: <!ENTITY %实体名称 "实体内容">. 在XML中使用参数实体, 用 %实体标志; 代表实体内容 <br/>
		 * 
		 * 无法从键盘输入的字符可以使用字符引用, 就是用字符的Unicode代码点来引用该字符, 以"&#"或"&#x"开始字符引用, 以分号结尾,
		 * x必须为小写, 使用十六进制, 如: &#x003D; 表示等于号, 查看字符的代码点[附件->系统工具->字符映射表]<br/>
		 */
	}

	public void xmlCDATA() {
		/**
		 * XML CDATA<br/>
		 * 
		 * 当一段文本中出现很多实体引用和字符引用时, 会导致文本数据的读写困难, CDATA段就是为了解决这一问题引入的<br/>
		 * 语法: "<![CDATA[" 文本数据 "]]>"<br/>
		 * CDATA内部的所有内容都会被解析器忽略解析, 不检查它的格式, 但一个CDATA段中不能嵌套另一个CDATA段<br/>
		 */
	}

	public void xmlNameSpace() {
		/**
		 * XML名称空间<br/>
		 * 
		 * XML文件允许自定义标记, 所以可能出现同名字的标记, 为了区分这些标记, 就需要使用名称空间<br/>
		 * 名称空间的目的是有效的区分相同的标记, 其实并不真实存在<br/>
		 * 
		 * 语法:<br/>
		 * 声明有前缀的名称空间 xmlns:前缀名=名称空间的名字<br/>
		 * 声明无前缀的名称空间 xmlns=名称空间的名字[缺省]<br/>
		 * 
		 * 前缀不作为命名空间区分的标准<br/>
		 */
	}
}
